{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f1cc65d6",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# Optional Lab: Logistic Regression, Decision Boundary\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86fe6af0",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Goals\n",
    "In this lab, you will:\n",
    "- Plot the decision boundary for a logistic regression model. This will give you a better sense of what the model is predicting.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6ee320a5",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "%matplotlib widget\n",
    "import matplotlib.pyplot as plt\n",
    "from lab_utils_common import plot_data, sigmoid, draw_vthresh\n",
    "plt.style.use('./deeplearning.mplstyle')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7867bf8d",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Dataset\n",
    "\n",
    "Let's suppose you have following training dataset\n",
    "- The input variable `X` is a numpy array which has 6 training examples, each with two features\n",
    "- The output variable `y` is also a numpy array with 6 examples, and `y` is either `0` or `1`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "9baca38b",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "X = np.array([[0.5, 1.5], [1,1], [1.5, 0.5], [3, 0.5], [2, 2], [1, 2.5]])\n",
    "y = np.array([0, 0, 0, 1, 1, 1]).reshape(-1,1) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "182b8eb5",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Plot data \n",
    "\n",
    "Let's use a helper function to plot this data. The data points with label $y=1$ are shown as red crosses, while the data points with label $y=0$ are shown as blue circles. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "89a44af6",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "Canvas(footer_visible=False, header_visible=False, toolbar=Toolbar(toolitems=[('Home', 'Reset original view', …",
      "image/png": "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/frXv9amTZu8aqzaZp31ZsU2+/Of/6wPP/xQv/nNbzqtDcbf0eDZj+tEMF+A2NXeBg8erKioqNZ1FixYoL179/Zob10RzBdtWrnNnnvuOW3ZskWbNm3SgAEDvJZbud06683qz9qiRYtUXl6us2fPeswPhs+av96s2Gbvv/++PvvsM6Wmpmr8+PGqra1Vdna2181lg2G7+WKbAAnmCxC72tupU6fkdDolSY2Njdq+fbtSU1N7tLeuCOaLNq3aZmvXrlVJSYk2b97scfy8Lau2W1d6C/R2a2ho0MmTJ1unt2zZopiYGA0ZMsSjzopt1tXerPisPfTQQzpy5Ig+/vhjffzxxxo5cqTefvttzZgxw6MuWH9HbXUdSDBfgNiV3l555RWtX79eoaGhunz5subNm6fHH3/c78DZ1fDoo49q27Ztqqur09ChQzVw4EDt378/KLZZV3qzYpvV1NTohhtuUFJSkgYNGiRJioiI0M6dOy3fbl3tLdDb7cSJE1q8eLGamprkcDg0bNgwPfnkk0pNTbV8m3W1Nys+a+21/CE6btw4y7dbV9gqQAAAwcM2h7AAAMGFAAEAGCFAAABGCBAAgBECBABghAABABghQAAARggQAIARAgTw45VXXtF1113X+lChxsZGTZ48WStWrLC4MyA4ECCAH7m5uQoPD1dxcbGcTqeWLVum+Ph4PfXUU1a3BgQFW93OHQikiIgIPfzww1q9erU+//xznThxQmVlZQoNDbW6NSAocC8soAPffvutxo0bp9DQUO3cudPjFtobN27UunXrJEm/+tWvdPvtt1vVJmAJ9kCADmzatEnnzp3TkCFDNHTo0Nb5586dU2Fhof74xz/qwoUL+od/+AdVVFSwd4I+hTEQwI+Kigr98z//s0pKStSvXz+9+uqrrcs++OAD3Xrrrerfv79iYmIUHx+vo0ePWtgtEHgECOBDZWWlFi9erFWrVun222/XQw89pGeffVbffPONJOmrr77yeJhTdHS0vvrqK4u6BaxBgADt1NfX64477lBubq4WLVokScrJyVF4eHjrXkhMTIzq6+tb1zl37pxiYmKsaBewDIPogIH6+nplZmZq165dunDhgmbPnq3y8nKFhTGsiL6DTztgIDo6Wg8++KDmzJkjh8OhlStXEh7oc9gDAQAYYQwEAGCEAAEAGCFAAABGCBAAgBECBABghAABABghQAAARggQAIARAgQAYIQAAQAYIUAAAEb+P2Wz/rU+Z9N0AAAAAElFTkSuQmCC",
      "text/html": "\n            <div style=\"display: inline-block;\">\n                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n                    Figure\n                </div>\n                <img src='' width=400.0/>\n            </div>\n        ",
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "3437ff673e5f43ac88942427c0311ba8"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(1,1,figsize=(4,4))\n",
    "plot_data(X, y, ax)\n",
    "\n",
    "ax.axis([0, 4, 0, 3.5])\n",
    "ax.set_ylabel('$x_1$')\n",
    "ax.set_xlabel('$x_0$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bdfd265a",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Logistic regression model\n",
    "\n",
    "\n",
    "* Suppose you'd like to train a logistic regression model on this data which has the form   \n",
    "\n",
    "  $f(x) = g(w_0x_0+w_1x_1 + b)$\n",
    "  \n",
    "  where $g(z) = \\frac{1}{1+e^{-z}}$, which is the sigmoid function\n",
    "\n",
    "\n",
    "* Let's say that you trained the model and get the parameters as $b = -3, w_0 = 1, w_1 = 1$. That is,\n",
    "\n",
    "  $f(x) = g(x_0+x_1-3)$\n",
    "\n",
    "  (You'll learn how to fit these parameters to the data further in the course)\n",
    "  \n",
    "  \n",
    "Let's try to understand what this trained model is predicting by plotting its decision boundary"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3251639a",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Refresher on logistic regression and decision boundary\n",
    "\n",
    "* Recall that for logistic regression, the model is represented as \n",
    "\n",
    "  $$f_{\\mathbf{w},b}(\\mathbf{x}^{(i)}) = g(\\mathbf{w} \\cdot \\mathbf{x}^{(i)} + b) \\tag{1}$$\n",
    "\n",
    "  where $g(z)$ is known as the sigmoid function and it maps all input values to values between 0 and 1:\n",
    "\n",
    "  $g(z) = \\frac{1}{1+e^{-z}}\\tag{2}$\n",
    "  and $\\mathbf{w} \\cdot \\mathbf{x}$ is the vector dot product:\n",
    "  \n",
    "  $$\\mathbf{w} \\cdot \\mathbf{x} = w_0 x_0 + w_1 x_1$$\n",
    "  \n",
    "  \n",
    " * We interpret the output of the model ($f_{\\mathbf{w},b}(x)$) as the probability that $y=1$ given $\\mathbf{x}$ and parameterized by $\\mathbf{w}$ and $b$.\n",
    "* Therefore, to get a final prediction ($y=0$ or $y=1$) from the logistic regression model, we can use the following heuristic -\n",
    "\n",
    "  if $f_{\\mathbf{w},b}(x) >= 0.5$, predict $y=1$\n",
    "  \n",
    "  if $f_{\\mathbf{w},b}(x) < 0.5$, predict $y=0$\n",
    "  \n",
    "  \n",
    "* Let's plot the sigmoid function to see where $g(z) >= 0.5$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a73f3496",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …",
      "image/png": "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",
      "text/html": "\n            <div style=\"display: inline-block;\">\n                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n                    Figure\n                </div>\n                <img src='' width=500.0/>\n            </div>\n        ",
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "5f47f35b1ff241eeb51b1b0e37c9363c"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot sigmoid(z) over a range of values from -10 to 10\n",
    "z = np.arange(-10,11)\n",
    "\n",
    "fig,ax = plt.subplots(1,1,figsize=(5,3))\n",
    "# Plot z vs sigmoid(z)\n",
    "ax.plot(z, sigmoid(z), c=\"b\")\n",
    "\n",
    "ax.set_title(\"Sigmoid function\")\n",
    "ax.set_ylabel('sigmoid(z)')\n",
    "ax.set_xlabel('z')\n",
    "draw_vthresh(ax,0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b5bea62",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "* As you can see, $g(z) >= 0.5$ for $z >=0$\n",
    "\n",
    "* For a logistic regression model, $z = \\mathbf{w} \\cdot \\mathbf{x} + b$. Therefore,\n",
    "\n",
    "  if $\\mathbf{w} \\cdot \\mathbf{x} + b >= 0$, the model predicts $y=1$\n",
    "  \n",
    "  if $\\mathbf{w} \\cdot \\mathbf{x} + b < 0$, the model predicts $y=0$\n",
    "  \n",
    "  \n",
    "  \n",
    "### Plotting decision boundary\n",
    "\n",
    "Now, let's go back to our example to understand how the logistic regression model is making predictions.\n",
    "\n",
    "* Our logistic regression model has the form\n",
    "\n",
    "  $f(\\mathbf{x}) = g(-3 + x_0+x_1)$\n",
    "\n",
    "\n",
    "* From what you've learnt above, you can see that this model predicts $y=1$ if $-3 + x_0+x_1 >= 0$\n",
    "\n",
    "Let's see what this looks like graphically. We'll start by plotting $-3 + x_0+x_1 = 0$, which is equivalent to $x_1 = 3 - x_0$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "f3c4a990",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "Canvas(footer_visible=False, header_visible=False, toolbar=Toolbar(toolitems=[('Home', 'Reset original view', …",
      "image/png": "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",
      "text/html": "\n            <div style=\"display: inline-block;\">\n                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n                    Figure\n                </div>\n                <img src='' width=500.0/>\n            </div>\n        ",
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "0ee7dd8594764f6691466cd9a114ecc9"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Choose values between 0 and 6\n",
    "x0 = np.arange(0,6)\n",
    "\n",
    "x1 = 3 - x0\n",
    "fig,ax = plt.subplots(1,1,figsize=(5,4))\n",
    "# Plot the decision boundary\n",
    "ax.plot(x0,x1, c=\"b\")\n",
    "ax.axis([0, 4, 0, 3.5])\n",
    "\n",
    "# Fill the region below the line\n",
    "ax.fill_between(x0,x1, alpha=0.2)\n",
    "\n",
    "# Plot the original data\n",
    "plot_data(X,y,ax)\n",
    "ax.set_ylabel(r'$x_1$')\n",
    "ax.set_xlabel(r'$x_0$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbb5b861",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "* In the plot above, the blue line represents the line $x_0 + x_1 - 3 = 0$ and it should intersect the x1 axis at 3 (if we set $x_1$ = 3, $x_0$ = 0) and the x0 axis at 3 (if we set $x_1$ = 0, $x_0$ = 3). \n",
    "\n",
    "\n",
    "* The shaded region represents $-3 + x_0+x_1 < 0$. The region above the line is $-3 + x_0+x_1 > 0$.\n",
    "\n",
    "\n",
    "* Any point in the shaded region (under the line) is classified as $y=0$.  Any point on or above the line is classified as $y=1$. This line is known as the \"decision boundary\".\n",
    "\n",
    "As we've seen in the lectures, by using higher order polynomial terms (eg: $f(x) = g( x_0^2 + x_1 -1)$, we can come up with more complex non-linear boundaries."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cfde5655",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Congratulations!\n",
    "You have explored the decision boundary in the context of logistic regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "40e0932c",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a2ef86f2",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}